﻿#pragma warning(disable: 4996)
#pragma warning(disable: 6031)

/*
本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:
输入在一行中给出两个正整数M和N（≤1000）。

输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数，两数字间以1空格分隔。

输入样例:
511 292
输出样例:
73 2044
*/

#include <stdio.h>

void sort_descend(int* a, int* b)
{
	if (*b > * a)
	{
		int c = *a;
		*a = *b;
		*b = c;
	}
}

int gcd(int a, int b)
{
	int ret = b;
	while (1) {
		if (a % ret == 0)
			break;
		b = a % ret;
		a = ret;
		ret = b;
	}
	return ret;
}

int lcm(int a, int b)
{
	return b / gcd(a, b) * a;
}

void solve() {
	int a, b;
	scanf("%d %d", &a, &b);
	sort_descend(&a, &b);
	printf("%d %d\n", gcd(a, b), lcm(a, b));
}

int main()
{
	freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/DataStructure/M2019秋C入门和进阶练习集/7-26.txt", "r", stdin);
	solve();
	return 0;
}